/*
 * 表单页面智能提示插件
 * 依赖
 * jquery-ui-min.js
 * jquery-ui.css
 * 如果使用默认设置或将useJQueryPosition设置成false
 * 依赖 jquery-ism-tooltip.css
 */
;(function($) {
	/**
	 * 获取页面的BASEPATH
	 */
	function getPageBasePath(){
		if($("base").length>0){
			return $("base").first().attr("href");
		}
		var docUrl = window.location.href;
		var loop = 0, idx = 0;
		while(loop++<4){
			idx = docUrl.indexOf("/", idx+1);
		}
		return docUrl.substring(0,idx+1);
	}
	
	$.extend({
		showTips : new function (){
			var defaults = {
				tipsAttr: "showTips",                //显示提示字符的属性, 这个属性一定要填
				selectorDefault: ":input",         //需要提示的控件选择器
				tipsPaddingDefault: 0,              //提示层两边默认的PADDING, 在不能自动获取的情况下有效
				tipsBorderWidthDefault: 0,      //提示层两边默认的BORDER大小, 在不能自动获取的情况下有效
				useJQueryPosition: false,          //是否使用JQUERY原来的位置生成器 ， 默认自定义
				//JSON文件扩展名前的标识，如：tooltip.internetbar.json文件
				//这里填写internetbar就OK了。
				//注意：这里JSON文件的命名规范，tooltip.xxx.json
				jsonFileName: "",
				useRemote:true, //是否远程取JSON数据
				localJsonData:{} //本地传入JSON数据
			};  
			return {
				/**
				 * 控件配置
				 * @param settings
				 * @returns
				 */
				tips : function(settings) {
					var _self = this;
					this.config = $.extend({},defaults, settings);
					//从服务器取回JSON格式的提示信息
					this.selfJson=null;
					//取JSON
					_self.getTipsJson();
					//注册提示
					$(_self.config.selectorDefault+":checkbox,"+_self.config.selectorDefault+":radio").each(function(){
						var _tbox = $(this);
						_tbox.next("label").attr("name",_tbox.attr("name"));
						_tbox.filter("[title='multip']").next("label").attr("title", function(){return _tbox.attr("title");});
					});
					var tipTarget = $(_self.config.selectorDefault+","+_self.config.selectorDefault+":checkbox+label,"+_self.config.selectorDefault+":radio+label")
					.attr(_self.config.tipsAttr,function(){
						var existsContent = $(this).attr(_self.config.tipsAttr);
						return existsContent?existsContent:"";
					});
					//$(_self.config.selectorDefault).filter(":text,textarea,select[multiple]")
					//	.addClass("ui-widget-content ui-corner-all");
					//.css({"padding-left":"5px","padding-right":"5px"});
					//调用生成方法
					_self.registerNewModule(tipTarget);
					return _self;
				},
				/**
				 * 注册提示控件
				 * @param module
				 * @returns
				 */
				registerNewModule:function(module){
					var _self = this;
					var _tooltip = module.tooltip({
						position: _self.getDefaultPosition(),
						items:"["+_self.config.tipsAttr+"]",
						content:function(){
							var tgName = $(this).attr("name");
							if(!tgName) return "";
							
							if($(this).attr("title")=='multip'&&$("[name='"+tgName+"']").length>1){
								$(this).attr("title","");
								$(this).mouseout(function(){$(this).attr("title","multip");});
								tgName=$(this).attr("id");
								if($(this).is("label")){
									tgName=$(this).attr("for");
								}
								tgName=tgName.replace("-","_");
							}
							
							//将控件NAME中的“.”号换成“_”,去掉类似[0]的下标
							tgName = tgName.replace(/\./g, "_").replace(/\[[0-9]]/g,"");
							var remoteJson = _self.selfJson;
							var existsContent = $(this).attr(_self.config.tipsAttr);
							if(!existsContent&&remoteJson){
								try{
									var jsonVal = eval("remoteJson."+tgName);
									if(jsonVal) return jsonVal;
								}catch(e){}
							}
							return existsContent?existsContent:"";
						}
					});
					_tooltip.unbind("focusin");
				},
				/**
				 * 获取提示信息
				 * @param jsonfile
				 * @param tipObj
				 * @returns
				 */
				getTipsJson: function(){
					var _self = this;
					if(!$.isEmptyObject(_self.selfJson)) return _self.selfJson;
					if(_self.config.useRemote){
						var basePath = getPageBasePath();
						var jsonfile = _self.config.jsonFileName;
						jsonfile = jsonfile ? jsonfile : "base";
						$.getJSON(basePath+"json/tooltip."+jsonfile+".json", function(json){
							_self.selfJson = $.extend(json, _self.config.localJsonData);
						});
					}else{
						_self.selfJson = _self.config.localJsonData;
					}
				},
				/**
				 * 返回自定义的位置参数
				 */
				getDefaultPosition: function(){
					var _self = this;
					if(!_self.useJQueryPosition){
						return {
							my: "center bottom-10",
							at: "center top",
							using: function( position, feedback ) {
								var inputTarget = feedback.target;
								var longCharWidth = inputTarget.width<256?256:inputTarget.width; //可自定义TIPS的最大宽度
								var thisPadding =  parseInt($(this).css("padding-left")) || _self.config.tipsPaddingDefault;
								var thisBorderWidth = parseInt($(this).css("border-width")) || _self.config.tipsBorderWidthDefault;
								if($(this).width() > longCharWidth){
									var theight = $(this).height();
									//预期的宽度要减去容器的左右间隔和左右边框的大小
									$(this).width(longCharWidth-thisPadding*2-thisBorderWidth*2);
									//变形后的高度与原来高度的差值
									position.top=position.top+theight-$(this).height(); 
									//目标位置向左移动目标控件和TIP宽度的差值
									position.left=inputTarget.left+(inputTarget.width-longCharWidth)/2;
									//feedback.horizontal="center";
								}
								$( this ).css( position );
								feedback.horizontal="center";
								var jt = "50%";
								if($(this).width() > inputTarget.width){
									 jt = Math.abs(inputTarget.left-position.left)+(inputTarget.width/2)-3;
								}
								$( "<div>" )
									.addClass( "arrow" )
									.addClass( feedback.vertical )
									.addClass( feedback.horizontal )
									.css({padding:"0px",left: jt})
									.appendTo( this );
							}
						};
					}
					$("#ism-tool-tip-id").remove();
					return {
						my: "left+15 center",
						at: "right center",
						collision: "flipfit flipfit"
					};
				}
			};
		}
	});
})(jQuery); 
